package ui;


import Utils.WriteDownUsers;
import domain.User;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import static Utils.ReadUsers.readUsers;

/**
 * 注册界面
 * 页面美化:bijiajun
 */
public class RegisterJFrame extends JFrame implements ActionListener {

    //注册按钮
    JButton register = new JButton("注册");
    //返回登录
    JButton goBackLogin = new JButton("返回登录");
    //用户名文本框
    JTextField username = new JTextField();
    //密码文本框
    JPasswordField password1 = new JPasswordField();
    //确认密码文本框
    JPasswordField password2 = new JPasswordField();
    //邮箱文本框
    JTextField postbox = new JTextField();

    public RegisterJFrame() {
        //初始化界面
        initJFrame();
        //在这个界面中添加内容
        initView();
        //给界面和按钮添加图片
        initImage();
        //是否可见(写在最后)
        this.setVisible(true);
    }

    private void initImage() {
        //添加背景图片
        JLabel background = new JLabel(new ImageIcon(this.getClass().getResource("/image/RegisterJFrame/背景.png")));
        background.setBounds(0, 0, 603, 680);
        this.getContentPane().add(background);
    }

    /**
     * 负责人:bijiajun
     * 功能:添加"请输入账号","请输入密码,"请再次输入密码"文本,并为其添加文本输入框
     * 添加忘记密码,返回登录,注册按钮
     * 点击对应按钮执行对应逻辑
     * 如注册成功弹出一个"注册成功"弹窗
     * 账号已存在弹出一个"账号已存在"弹窗
     * 两次密码不一致弹出"两次密码不一致"弹窗
     */
    private void initView() {
        //添加请输入账号文字
        JLabel usernameText = new JLabel("请输入账号");
        usernameText.setBounds(110, 135, 470, 17);
        usernameText.setFont(new Font("微软雅黑", Font.BOLD, 13));
        this.getContentPane().add(usernameText);
        //添加请输入账号输入框
        username.setBounds(195, 130, 200, 30);
        this.getContentPane().add(username);

        //添加请输入密码文字
        JLabel passwordText1 = new JLabel("请输入密码");
        passwordText1.setBounds(115, 195, 320, 16);
        passwordText1.setFont(new Font("微软雅黑", Font.BOLD, 13));
        this.getContentPane().add(passwordText1);
        //添加请输入密码的输入框
        password1.setBounds(195, 190, 200, 30);
        this.getContentPane().add(password1);

        //添加请再次输入密码文字
        JLabel passwordText2 = new JLabel("请再次输入密码");
        passwordText2.setBounds(100, 255, 320, 16);
        passwordText2.setFont(new Font("微软雅黑", Font.BOLD, 13));
        this.getContentPane().add(passwordText2);
        //添加请再次输入密码的输入框
        password2.setBounds(195, 250, 200, 30);
        this.getContentPane().add(password2);

        //添加请输入邮箱文字
        JLabel postboxText = new JLabel("请输入邮箱");
        postboxText.setBounds(110, 315, 320, 16);
        postboxText.setFont(new Font("微软雅黑", Font.BOLD, 13));
        this.getContentPane().add(postboxText);
        //添加请输入邮箱输入框
        postbox.setBounds(195, 310, 200, 30);
        this.getContentPane().add(postbox);

        //添加注册按钮
        register.setBounds(410, 370, 128, 47);
        register.setBackground(new Color(253, 222, 122));
        register.addActionListener(this);
        this.getContentPane().add(register);

        //添加返回登录按钮
        goBackLogin.setBounds(50, 370, 128, 47);
        goBackLogin.setBackground(new Color(253, 222, 122));
        goBackLogin.addActionListener(this);
        this.getContentPane().add(goBackLogin);

    }

    private void initJFrame() {
        //设置长宽(像素)
        this.setSize(603, 680);
        //设置界面的标题
        this.setTitle("人生重开模拟器 v1.0   注册界面");
        //设置界面置顶
        this.setAlwaysOnTop(true);
        //设置界面居中
        this.setLocationRelativeTo(null);
        //设置关闭模式
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //取消默认的居中方式,只有取消了才会按照,x y轴的方式添加组件
        this.setLayout(null);

    }


    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == register) {
            Utils.Music.playSound("src\\music\\02.wav");
            //获取四个文本输入框中的内容
            String usernameInput = username.getText();
            String password1Input = password1.getText();
            String password2Input = password2.getText();
            String postboxInput = postbox.getText();
            if (usernameInput.length() == 0) {
                System.out.println("账号为空");
                //调用showJDialog方法并展示弹框
                Utils.JDialog.showJDialog("账号为空");
                return;
            }
            //遍历users确认账号存在或不存在
            for (int i = 0; i < LoginJFrame.users.size(); i++) {
                if (usernameInput.equals(LoginJFrame.users.get(i).getUsername())) {
                    System.out.println("账号已存在");
                    //调用showJDialog方法并展示弹框
                    Utils.JDialog.showJDialog("账号已存在");
                    return;
                }
            }
            if (password1Input.length() == 0 || password2Input.length() == 0) {
                //校验密码是否为空
                System.out.println("密码为空");
                //调用showJDialog方法并展示弹框
                Utils.JDialog.showJDialog("密码为空");
            } else {
                if (password1Input.equals(password2Input)) {
                    if (postboxInput.length() == 0) {
                        //校验邮箱是否为空
                        System.out.println("邮箱为空");
                        //调用showJDialog方法并展示弹框
                        Utils.JDialog.showJDialog("邮箱为空");
                        return;
                    }
                    User userInfo = new User(usernameInput, password1Input, postboxInput);
                    System.out.println("用户输入的账号为" + usernameInput);
                    System.out.println("用户输入的密码为" + password1Input);
                    LoginJFrame.users.add(userInfo);
                    try {
                        WriteDownUsers.writeDownUsers(LoginJFrame.users);
                    } catch (IOException ioException) {
                        ioException.printStackTrace();
                    }
                    System.out.println("用户输入的邮箱为" + postboxInput);
                    //LoginJFrame.users.add(userInfo);
                    for (int i = 0; i < LoginJFrame.users.size(); i++) {
                        System.out.println(LoginJFrame.users.get(i).getUsername() + " " + LoginJFrame.users.get(i).getPassword() + " " + LoginJFrame.users.get(i).getPostbox());
                    }
                    //注册成功
                    System.out.println("注册成功");
                    //调用showJDialog方法并展示弹框
                    Utils.JDialog.showJDialog("注册成功");
                } else {
                    //校验密码是否一致
                    System.out.println("两次密码不一致");
                    //调用showJDialog方法并展示弹框
                    Utils.JDialog.showJDialog("两次密码不一致");
                    return;
                }
                System.out.println("账号和密码正确可以开始进行登录了");
                //关闭当前注册界面
                this.setVisible(false);
                //打开游戏的登录界面
                new LoginJFrame();
            }
        } else if (e.getSource() == goBackLogin) {
            Utils.Music.playSound("src\\music\\02.wav");
            this.setVisible(false);
            new LoginJFrame();
        }
    }
}


